package com.stylefeng.guns.modular.system.service;


import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.stylefeng.guns.common.bo.WebuserBo;
import com.stylefeng.guns.common.constant.enums.IsAdd;
import com.stylefeng.guns.common.persistence.model.Webuser;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

/**
 * <p>
 * C端用户表 服务类
 * </p>
 *
 * @author stylefeng123
 * @since 2018-01-21
 */
public interface IWebuserService extends IService<Webuser> {



    int updateAccountMoney(Integer userId, BigDecimal amount);


    /**
     * 注册用户
     *
     * @param mobileNo
     * @param cipher
     * @return
     */
    boolean registerUser(String mobileNo, String cipher);

    /**
     * 加密密码
     *
     * @param cipher
     * @param identityId
     * @return
     */
    String encodeCipher(String cipher, String identityId);

    /**
     * 校验密码
     *
     * @param dbCipher
     * @param cipher
     * @return
     */
    boolean validLoginCipher(Webuser dbCipher, String cipher);



    /**
     * 忘记密码
     *
     * @param mobileNo
     * @param cipher
     * @return
     */
    boolean forgetLoginCipherUser(String mobileNo, String cipher);


    /**
     * 修改支付密码
     */
    boolean modifyPayCipher(String mobileNo, String cipher, String newCipher);


    /**
     * 设置支付密码
     *
     * @return
     */
    boolean setPayCipher(Webuser modifyWebuser, String cipher);


    /**
     * 忘记支付密码
     */
    boolean forgetPayCipher(String mobileNo, String cipher);

    /**
     * 新增支付密码
     *
     * @return
     */
    boolean addPayCipher(String mobileNo, String cipher);


    /**
     * 根据交易额进行排名，并把名次更新到数据库
     *
     * @return
     */
    void updateTradeRank();

    /**
     * 查询存在的用户
     *
     * @param telno
     * @return
     */
    Webuser qryExistWebUserByTelno(String telno);

    /**
     * 校验支付密码
     */
    boolean validPayCipher(Webuser dbCipher, String cipher);

    /**
     * 根据用户加减金额
     *
     * @param userId
     * @param isAdd
     * @param amount
     */
    void updateMoney(Integer userId, IsAdd isAdd, BigDecimal amount);

    /**
     * 每天用户增量  (自己注册 会员推荐 合资公司 代理商）
     * 精确到日期
     *
     * @param begindatetime 查询开始时间
     * @param enddatetime   查询结束时间
     */
    List<Map<String, Object>> getReportByDay(@Param("begindatetime") String begindatetime, @Param("enddatetime") String enddatetime);


    /**
     * 每天用户增量  (自己注册 会员推荐 合资公司 代理商）
     * 精确到月
     *
     * @param begindatetime 查询开始时间
     * @param enddatetime   查询结束时间
     */
    List<Map<String, Object>> getReportByMonth(@Param("begindatetime") String begindatetime, @Param("enddatetime") String enddatetime);

    /**
     * 每天用户增量  (自己注册 会员推荐 合资公司 代理商）
     * 精确到年
     *
     * @param begindatetime 查询开始时间
     * @param enddatetime   查询结束时间
     */
    List<Map<String, Object>> getReportByYear(@Param("begindatetime") String begindatetime, @Param("enddatetime") String enddatetime);

    /**
     * 修改登录密码
     */
    boolean modifyLoginCipher(WebuserBo webuserBo, String cipher, String newCipher);


    /**
     * 转人工处理提交
     * @param req
     */
   public void updateMoney(Webuser webuser);

    /**
     * 根据邀请码增加积分
     * @param inviteCode
     */
    public void increaseInviteCode(String inviteCode);

}
